home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Pascal Super Library
/
Pascal Super Library (CW International)(1997).bin
/
SWAG
/
SWAGA_C
/
ARCHIVES.SWG
/
0023_ARJ Password Cracker.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1995-03-03
|
4KB
|
191 lines
{
> Do somebody have a ARJ 2.41 Password finder, because I have packed
> some of my pascal codes and grabled it with password and now .... hmmmm
> I can't extract the ARJ file with the password. I must have typed a
> different password when I pascked those files.
In my next two messages is ARJCRACK.PAS. It's a program that may
help you find that password. It's EXTREMELY slow, but if you are
really really really (did i say really? :)) ) desperate about it
you might want to give it a try.
You will need to place this in a FAST machine (one you won't need
for a LONG while) along with ARJ.EXE and the password-encrypted
archive on the same drive & directory.
Tips to speed it up:
+ Using "ARJ v archive," pick the smallest file you can find (but not
less than about 10 bytes), that was archived using the store method
(no compression)
+ Move ARJ.EXE, ARJCRACK.EXE and the archive in a ram drive.
+ Remove some characters in PassSet that you think you never used
as the password (maybe ~ ` ^ etc..)
+ Run it in plain old DOS *NOT* under Windows or DESQview or OS2.
+ Start off the [last_password] parameter with "a" x minimum-password-
length-that-you-normaly-use. Something like:
arjcrack sources small.pas aaaa
^^^^
if you're sure that you never use passwords that are less
than 4 characters
jon.zarate@vidgame.com
}
{$M 8192, 0, 0}
{$V-}{$S-}{$G+}{$X+}{$R-}
uses
Crt, Dos;
const
PassSet : String =
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' +
'0123456789`=\[];'',./~!@#$%^&*()_{}:';
var
Pw : String;
Arc : String;
Fn : String;
Prev: String;
procedure Sounder(R : Integer);
var
N : Integer;
begin
N:=2000;
repeat
Sound(N);
N:=N + R;
if (N < 50) then N:=2000 else
if (N > 2000) then N:=50;
Delay(2);
until (KeyPressed);
NoSound;
end;
procedure Crack;
var
I : Word;
Pw: String[40];
J : Word;
X : Word;
Y : Word;
Z : array[1..41] of Byte;
C : Word;
begin
FillChar(Z, SizeOf(Z), 0);
if (Prev <> '') then
begin
for I:=1 to Length(Prev) do
begin
Z[I]:=Pos(Prev[I], PassSet);
if (Z[I] = 0) then
begin
writeln('Invalid character in [last_password]');
Halt;
end;
end;
Pw:=Prev;
X:=Length(Pw);
J:=X;
end else
begin
Pw:=PassSet[1];
Z[1]:=1;
X:=1;
J:=1;
end;
repeat
Pw[1]:=PassSet[Z[1]];
writeln;
writeln;
writeln('////////////////////////////////////////////////////////////');
writeln('ARJ t ', Arc, ' ', Fn, ' -g', Pw);
writeln;
SwapVectors;
Exec('ARJ.EXE', 't ' + Arc + ' ' + Fn + ' -g' + Pw);
SwapVectors;
writeln('////////////////////////////////////////////////////////////');
C:=DosExitCode;
if ((C = 0) and (DosError = 0)) then
begin
writeln;
writeln;
writeln('Hey I found it!!');
writeln('The password is -- ', Pw);
writeln;
Sounder(10);
Halt
end;
if ((C <> 3) or (DosError <> 0)) then
begin
writeln;
writeln('Duhh... What happened?? Why did I get an EXITCODE of ',
C, ' and a DOSERROR of ', DosError, '??');
Sounder(-30);
Halt
end;
if (KeyPressed) then
begin
writeln('ARJCRACK aborted.');
writeln('Last password used was --> ', Pw, ' <--');
Halt;
end;
inc(Z[1]);
for I:=1 to X do
begin
if (Z[I] > Length(PassSet)) then
begin
Z[I]:=1;
inc(Z[I + 1]);
if (I = J) then
begin
inc(J);
inc(X);
Pw[0]:=Chr(X);
Pw[X]:=PassSet[1];
end;
end;
Pw[I]:=PassSet[Z[I]];
end;
until (X > Length(Pw));
writeln('Sorry, I can''t find the password!!');
Sounder(-2);
end;
begin
writeln;
writeln;
writeln('ARJ Password Cracker Version 0.10');
writeln('by Jonathan Zarate');
writeln;
writeln('Password character set: ', PassSet);
writeln;
if ((ParamCount < 2) or (ParamCount > 3)) then
begin
writeln('Usage: ARJCRACK <archive> <file_to_crack> [last_password]');
Halt;
end;
Arc:=ParamStr(1);
Fn:=ParamStr(2);
Prev:=ParamStr(3);
Crack;
end.